package p3.enunciado;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.SocketException;

import p3.IActiveHandler;

public class ReceptionHandler implements IActiveHandler {

    // Socket de la conexión.
    Socket connHandler;
    // Stream para leer del socket.
    BufferedReader streamReader;
    // Cola de peticiones.
    RequestQueue reqQueue;
    // Dispatcher asociado a las peticiones de servicio  
    // que llegan por la conexión.
    Dispatcher dispatcher;

    /**
     * Crea ReceptionHandler
     * @param s socket asociado a la conexión con el cliente (devuelto en accept).
     * @throws IOException
     */
    public ReceptionHandler(Socket s) throws IOException {
        setHandlerSocket(s);
        // Crea cola de recepcion.

        // Crea Dispatcher. No lo arranca, se arranca en doService.

        // Crea hilo de recepción. No lo arranca, se arranca en doService.
    }

    @Override
    public void setHandlerSocket(Socket s) throws IOException {
    }

    @Override
    public void doService() {
        // Arranca hilo de recepción y dispatcher.
    }

    private void svc() {
        try {
            // Obtenemos la petición de servicio.
            String request = streamReader.readLine();

            // Comprobamos si es petición de fin de servicio.

            // Si no es petición de fin de servicio se encola.

            // Si es petición de fin de servicio se cierra la conexión.
            // Crear un CloseConnectionHandler para cerrarla.
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void shutdown() {
    }

    @Override
    public void run() {
        while (true) { // Cambiar true por condición de terminación.
            svc();
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
